﻿using System;
using System.Linq.Expressions;

namespace fluentvaly
{
    public interface IValidationStatementSetUp<T, TMember>
    {
        IValidationStatementSetUp<T, TMember> Is(Expression<Func<T, TMember, bool>> predicate);

        IValidationStatementSetUp<T, TMember> If(Expression<Func<TMember, bool>> predicate);

        IValidationStatementSetUp<T, TMember> If(Expression<Func<T, TMember, bool>> predicate);

        IValidationStatementSetUp<T, TMember> Is(Expression<Func<TMember, bool>> predicate);

        IValidationStatementSetUp<T, TMember> IsNot(Expression<Func<TMember, bool>> predicate);

        IValidationStatementSetUp<T, TMember> IsNot(Expression<Func<T, TMember, bool>> predicate);

        IValidationStatementSetUp<T, TMember> FailWith(InvalidationReasons reason, string message);

        IValidationStatementSetUp<T, TMember> FailWith(InvalidationReasons reason);
    }
}
